//funadap.cpp --using function adapters
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>

void Show(double);
const int LIM =5;
int main()
{
	using namespace std;
	double arr1[LIM]={36,39,42,45,48};
	double arr2[LIM]={25,27,29,31,33};
	vector<double> gr8 (arr1,arr1+LIM);
	vector<double> m8 (arr2,arr2+LIM);
	cout.setf(ios_base::fixed);
	cout.precision(1);
	cout<<"gr8:\t";
	for_each(gr8.begin(),gr8.end(),Show);
	cout<<endl;
	cout<<"m8:\t";
	for_each(m8.begin(),m8.end(),Show);
	cout<<endl;

	vector<double> sum(LIM);
	transform(gr8.begin(),gr8.end(),m8.begin(),sum.begin(),plus<double>());//m8为first2,last2省略，1,2区间相等。该语句：gr8与m8进行plus运算，并赋值给sum.
	cout<<"sum:\t";
	for_each(sum.begin(),sum.end(),Show);
	cout<<endl;

	vector<double> prod(LIM);
	transform(gr8.begin(),gr8.end(),prod.begin(),bind1st(multiplies<double>(),2.5));//将gr8遍历，都*2.5,再赋值给prod.
	cout<<"prod:\t";
	for_each(prod.begin(),prod.end(),Show);
	cout<<endl;
	return 0;
}

void Show(double v)
{
	std::cout.width(6);
	std::cout<<v<<' ';
}
